Transactions in DynamoDB হল একটি গুরুত্বপূর্ণ ফিচার যা ডেটাবেস অপারেশনগুলিকে একত্রিত করে এবং একযোগে সফল বা ব্যর্থ (Atomic) হতে সহায়ক। এটি বিশেষত গুরুত্বপূর্ণ যখন আপনি নিশ্চিত করতে চান যে একাধিক রিড এবং রাইট অপারেশন একই সময়ে সফল বা ব্যর্থ হবে, যেন ডেটা একরকমভাবে সিঙ্ক্রোনাইজড থাকে। DynamoDB-র ট্রানজেকশন ফিচারটি ACID (Atomicity, Consistency, Isolation, Durability) সাপোর্ট করে, যা অ্যাপ্লিকেশনের ডেটা নিরাপত্তা এবং সঙ্গতি নিশ্চিত করে।
DynamoDB-তে ট্রানজেকশন এর মাধ্যমে আপনি একাধিক রিড এবং রাইট অপারেশন একত্রে করতে পারেন, এবং যদি কোনো একটি অপারেশন ব্যর্থ হয়, তবে পুরো ট্রানজেকশনই ব্যর্থ হবে। এতে ডেটার সঠিকতা এবং এক্সাক্ট স্টেট নিশ্চিত করা যায়।
DynamoDB ট্রানজেকশন পরিচালনা করতে দুটি প্রধান API প্রদান করে:
import boto3
# DynamoDB ক্লায়েন্ট তৈরি
dynamodb = boto3.client('dynamodb')
# ট্রানজেকশন রাইট অপারেশন
response = dynamodb.transact_write_items(
TransactItems=[
{
'Put': {
'TableName': 'Users',
'Item': {
'UserID': {'S': '123'},
'Name': {'S': 'John Doe'},
'Age': {'N': '30'}
}
}
},
{
'Update': {
'TableName': 'Users',
'Key': {'UserID': {'S': '456'}},
'UpdateExpression': 'SET Age = :val1',
'ExpressionAttributeValues': {
':val1': {'N': '32'}
}
}
},
{
'Delete': {
'TableName': 'Users',
'Key': {'UserID': {'S': '789'}}
}
}
]
)
print("Transaction Successful:", response)
এটি একযোগে তিনটি অপারেশন সম্পাদন করবে:
Age
ফিল্ড আপডেট করবে।import boto3
# DynamoDB ক্লায়েন্ট তৈরি
dynamodb = boto3.client('dynamodb')
# ট্রানজেকশন রিড অপারেশন
response = dynamodb.transact_get_items(
TransactItems=[
{
'Get': {
'TableName': 'Users',
'Key': {'UserID': {'S': '123'}}
}
},
{
'Get': {
'TableName': 'Users',
'Key': {'UserID': {'S': '456'}}
}
}
]
)
# রেসপন্স থেকে ডেটা প্রিন্ট
for item in response['Responses']:
print(item)
এটি একযোগে দুটি GetItem অপারেশন চালাবে এবং দুইটি ব্যবহারকারীর তথ্য ফিরিয়ে আনবে।
DynamoDB ট্রানজেকশনগুলির কিছু সীমাবদ্ধতা রয়েছে:
DynamoDB ট্রানজেকশন একটি শক্তিশালী টুল, যা অ্যাটমিক রিড এবং রাইট অপারেশন নিশ্চিত করতে সাহায্য করে। এটি ACID প্রিন্সিপলের উপর ভিত্তি করে এবং ডেটা এক্সাক্টনেস এবং ইন্টিগ্রিটি রক্ষা করতে ব্যবহৃত হয়। আপনি যখন একাধিক ডেটাবেস অপারেশন একযোগে করতে চান এবং নিশ্চিত করতে চান যে সেগুলি একযোগে সফল বা ব্যর্থ হবে, তখন ট্রানজেকশন ব্যবহার করা উচিত।
DynamoDB Transactions একটি শক্তিশালী বৈশিষ্ট্য যা আপনাকে একাধিক রিড এবং রাইট অপারেশন একযোগভাবে (atomic) সম্পাদন করতে দেয়। এটি ACID (Atomicity, Consistency, Isolation, Durability) গ্যারান্টি প্রদান করে, যার মাধ্যমে ডেটাবেসে একাধিক অপারেশন একযোগে নিরাপদ এবং সঠিকভাবে সম্পাদিত হয়।
যখন আপনি একাধিক রিড বা রাইট অপারেশনকে একসাথে একত্রে কার্যকর করতে চান, তখন Transactions ব্যবহার করা হয়। এটি ডেটা একসাথে আপডেট, রিড, অথবা ডিলিট করার একটি কার্যকর পদ্ধতি, যাতে আপনি পুরো কার্যক্রমকে একটি একক লেনদেন (transaction) হিসেবে বিবেচনা করতে পারেন।
DynamoDB Transactions দুটি প্রধান API প্রদান করে:
import boto3
from botocore.exceptions import ClientError
# DynamoDB client তৈরি
dynamodb = boto3.client('dynamodb')
# TransactWriteItems API কল করা
try:
response = dynamodb.transact_write_items(
TransactItems=[
{
'Put': {
'TableName': 'Users',
'Item': {
'UserID': {'S': '12345'},
'Name': {'S': 'John Doe'},
'Age': {'N': '30'}
}
}
},
{
'Update': {
'TableName': 'Accounts',
'Key': {
'AccountID': {'S': '67890'}
},
'UpdateExpression': 'SET Balance = Balance + :val',
'ExpressionAttributeValues': {
':val': {'N': '100'}
}
}
}
]
)
print("Transaction succeeded:", response)
except ClientError as e:
print("Transaction failed:", e)
import boto3
# DynamoDB client তৈরি
dynamodb = boto3.client('dynamodb')
# TransactGetItems API কল করা
response = dynamodb.transact_get_items(
TransactItems=[
{
'Get': {
'TableName': 'Users',
'Key': {
'UserID': {'S': '12345'}
}
}
},
{
'Get': {
'TableName': 'Accounts',
'Key': {
'AccountID': {'S': '67890'}
}
}
}
]
)
# রিড ফলাফল দেখানো
for item in response['Responses']:
print(item)
Put
, Update
, Delete
, এবং Get
অপারেশনগুলি ট্রানজেকশনে ব্যবহার করা যায়। অন্যান্য কিছু অপারেশন যেমন Query
বা Scan
ব্যবহার করা যায় না।DynamoDB Transactions অত্যন্ত শক্তিশালী এবং স্কেলেবল টুল যা আপনার অ্যাপ্লিকেশনকে একাধিক রিড/রাইট অপারেশন একযোগে করার সুযোগ দেয়, যা ডেটার সঙ্গতি এবং নিরাপত্তা বজায় রাখে। আপনি যখন একাধিক টেবিল বা আইটেমে কাজ করছেন এবং আপনার লেনদেনটি অ্যাটমিক এবং সঠিক হওয়া প্রয়োজন, তখন এটি ব্যবহারের জন্য একটি আদর্শ পদ্ধতি।
DynamoDB তে Transactional Reads এবং Writes এমন একটি ক্ষমতা যা আপনাকে একাধিক রেকর্ড (Items) একত্রে, সম্পূর্ণভাবে এবং সঠিকভাবে আপডেট, রিড, বা ডিলিট করতে সক্ষম করে। এটি অ্যাপ্লিকেশনগুলির জন্য গুরুত্বপূর্ণ যখন ACID (Atomicity, Consistency, Isolation, Durability) ট্রানজেকশন নিশ্চিত করা প্রয়োজন, বিশেষত একাধিক ডেটা পয়েন্ট বা রেকর্ডের পরিবর্তন একযোগে সম্পাদন করার সময়।
Transactional Reads এবং Writes এর মাধ্যমে আপনি ডেটার ইন্টিগ্রিটি বজায় রাখতে পারেন এবং একটি ট্রানজেকশন অপারেশনের সবগুলো রিড বা রাইট অ্যাকশন একযোগে সফলভাবে সম্পন্ন করতে পারেন অথবা ব্যর্থ হলে সমস্ত পরিবর্তন বাতিল করতে পারেন।
Transactional Reads ব্যবহারের মাধ্যমে আপনি একটি বা একাধিক আইটেম (Items) পড়তে পারেন যা একযোগে ট্রানজেকশনের অংশ হবে। এর মাধ্যমে আপনি নিশ্চিত হতে পারেন যে সমস্ত রিড অপারেশন একত্রে সফল হয়েছে বা যদি কিছু কারণে অপারেশন ব্যর্থ হয়, তবে কোন পরিবর্তন ঘটবে না।
UserID
এবং OrderID
দিয়ে চিহ্নিত করা হয়েছে।API কল:
aws dynamodb transact-get-items \
--transact-items '[
{
"Get": {
"TableName": "Users",
"Key": { "UserID": { "S": "user123" } }
}
},
{
"Get": {
"TableName": "Orders",
"Key": { "OrderID": { "S": "order567" } }
}
}
]'
Transactional Writes এর মাধ্যমে একাধিক আইটেম একযোগে আপডেট বা ইন্সার্ট করা যায়, যেটি ACID প্রিন্সিপলে কাজ করে। যদি এক বা একাধিক রেকর্ডে কোনো সমস্যা থাকে (যেমন নির্দিষ্ট আইটেম পাওয়া না গেলে বা ব্যতিক্রম ঘটলে), তখন সমস্ত রাইট অপারেশনই বাতিল হয়ে যাবে। এর ফলে ডেটা ইনকনসিস্টেন্সি বা আংশিক আপডেট থেকে রক্ষা পাওয়া যায়।
Users
এবং একটি Orders
) একযোগে রেকর্ড ইনসার্ট করতে হবে।API কল:
aws dynamodb transact-write-items \
--transact-items '[
{
"Put": {
"TableName": "Users",
"Item": {
"UserID": { "S": "user123" },
"Name": { "S": "John Doe" }
}
}
},
{
"Put": {
"TableName": "Orders",
"Item": {
"OrderID": { "S": "order567" },
"UserID": { "S": "user123" },
"Amount": { "N": "150" }
}
}
}
]'
Put
অপারেশন একযোগে ট্রানজেকশন আকারে কার্যকর করবে। যদি একটি অপারেশন ব্যর্থ হয় (যেমন Users
টেবিলের ইনসার্ট), তবে Orders
টেবিলের ইনসার্টও বাতিল হবে। অর্থাৎ, একসাথে উভয় অপারেশনই সফল হতে হবে।DynamoDB Transactions ACID গুণাবলী নিশ্চিত করে:
DynamoDB এ ট্রানজেকশনাল অপারেশন করার জন্য দুটি প্রধান API রয়েছে:
TransactGetItems
: একাধিক আইটেম পড়ার জন্য ব্যবহৃত।TransactWriteItems
: একাধিক আইটেম লিখতে বা আপডেট করতে ব্যবহৃত।এই API গুলি একাধিক রেকর্ডের উপর পার্টিশন বা সোর্ট কী নির্ভর করে এবং একযোগে ট্রানজেকশন পরিচালনা করতে সক্ষম।
Transactional Reads এবং Writes ব্যবহার করলে আপনি DynamoDB তে ডেটা পরিচালনায় একটি উচ্চমানের সুরক্ষা এবং ইন্টিগ্রিটি বজায় রাখতে পারবেন। একাধিক রেকর্ডের উপর একযোগে অপারেশন পরিচালনার জন্য এটি একটি শক্তিশালী সমাধান, বিশেষ করে যখন অ্যাপ্লিকেশনের জন্য ডেটা সঠিকতা অত্যন্ত গুরুত্বপূর্ণ।
ACID (Atomicity, Consistency, Isolation, Durability) হল ডেটাবেস সিস্টেমের মৌলিক বৈশিষ্ট্যসমূহ, যা নিশ্চিত করে যে ডেটাবেস ট্রানজ্যাকশনগুলি সঠিকভাবে এবং নিরাপদভাবে সম্পন্ন হয়। AWS DynamoDB ACID বৈশিষ্ট্যগুলি নির্দিষ্ট পরিমাণে সমর্থন করে, যা ট্রানজ্যাকশনাল সিস্টেমের জন্য গুরুত্বপূর্ণ।
DynamoDB একটি NoSQL ডেটাবেস হলেও, এটি ACID compliance এর একটি নির্দিষ্ট স্তর প্রদান করে, বিশেষ করে ট্রানজেকশনাল অপারেশনের জন্য। এই অপারেশনগুলি আপনাকে একাধিক ডেটা পয়েন্ট নিয়ে একটি সম্পূর্ণ পারস্পরিক সম্পর্কিত কাজ পরিচালনা করতে দেয়, যেখানে ট্রানজেকশনটি সফলভাবে সম্পন্ন না হলে কোনও পরিবর্তন ঘটবে না।
Atomicity (আটমিকিটি):
DynamoDB তে Transactional Writes এই সুবিধা প্রদান করে। আপনি একাধিক রেকর্ডের মধ্যে পারস্পরিক নির্ভরশীলতা বজায় রেখে ইনসার্ট, আপডেট বা ডিলিট করতে পারেন, এবং যদি কোন একটি অপারেশন ব্যর্থ হয়, তবে সমস্ত পরিবর্তন রোলব্যাক হবে।
উদাহরণ:
Consistency (সঙ্গতি):
DynamoDB নিশ্চিত করে যে একটি ট্রানজেকশন শুরু হওয়ার পর ডেটাবেসের মান Consistency অনুযায়ী থাকবে, এমনকি একাধিক রেকর্ড পরিবর্তন বা প্রক্রিয়া করা হলে। তবে, Eventual Consistency প্রাথমিকভাবে DynamoDB তে ব্যবহৃত হলেও, ট্রানজেকশনাল API গুলি ব্যবহার করে আপনি Strong Consistency নিশ্চিত করতে পারেন।
Isolation (আয়সোলেশন):
DynamoDB তে Isolation সাধিত হয় ট্রানজেকশন চালানোর সময়। যদি একাধিক ট্রানজেকশন একসাথে চলে, তবে তাদের মধ্যে কোনও পারস্পরিক প্রভাব পরবে না এবং তারা সম্পূর্ণ আলাদাভাবে সম্পন্ন হবে।
Durability (স্থায়িত্ব):
DynamoDB এর মধ্যে Durability সুনিশ্চিত করা হয়, কারণ এটি Multiple Availability Zones এ ডেটা রেপ্লিকেট করে। যখন আপনি ট্রানজেকশন সম্পন্ন করেন, তখন নিশ্চিত হয় যে ডেটা স্থায়ীভাবে সঞ্চিত হয়েছে এবং তা যদি সার্ভার বা সিস্টেম ক্র্যাশ হয়, তাও তা নিরাপদ থাকবে।
DynamoDB তে ACID-compliant transactions চালানোর জন্য, AWS একটি ট্রানজেকশনাল API প্রদান করেছে যা TransactWriteItems
এবং TransactGetItems
নামক দুটি প্রধান অপারেশন ধারণ করে।
এই অপারেশনটি একাধিক Write অপারেশনকে একসাথে একত্রিত করতে এবং একটি একক ACID ট্রানজেকশনে পরিচালনা করতে সক্ষম। এই অপারেশনটি ইনসার্ট, আপডেট, এবং ডিলিট অপারেশনগুলিকে একত্রে সম্পন্ন করে।
উদাহরণ (Python SDK):
import boto3
from botocore.exceptions import ClientError
# DynamoDB ক্লায়েন্ট তৈরি করা
dynamodb = boto3.client('dynamodb')
# ট্রানজেকশনাল লেখার জন্য আইটেম
try:
response = dynamodb.transact_write_items(
TransactItems=[
{
'Put': {
'TableName': 'Users',
'Item': {
'UserID': {'S': '12345'},
'Name': {'S': 'John Doe'},
'Age': {'N': '30'}
}
}
},
{
'Update': {
'TableName': 'Accounts',
'Key': {
'AccountID': {'S': 'A123'}
},
'UpdateExpression': 'SET Balance = Balance - :amount',
'ExpressionAttributeValues': {
':amount': {'N': '100'}
}
}
}
]
)
print("Transaction successful!")
except ClientError as e:
print(f"Error: {e}")
এই অপারেশনটি একাধিক Get অপারেশনকে একত্রিত করে এবং ডেটা একসাথে রিটার্ন করে, যা একটি ACID ট্রানজেকশন হিসেবে কাজ করে।
ACID এর মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনে আরও নির্ভরযোগ্য এবং সঠিক ডেটাবেস ট্রানজেকশন গঠন করতে পারেন।
Amazon DynamoDB Transactional API আপনাকে ACID (Atomicity, Consistency, Isolation, Durability) গুণাবলী সহ ট্রানজেকশন পরিচালনা করার সুযোগ দেয়। এটি আপনাকে একাধিক রিড এবং রাইট অপারেশন একসাথে একটি ইউনিট হিসেবে সম্পাদন করার অনুমতি দেয়, যেখানে সমস্ত অপারেশন সফল হলে একযোগে কমিট হবে এবং যদি কোন সমস্যা হয়, তাহলে সবকিছু রোলব্যাক হবে।
DynamoDB এর ট্রানজেকশনাল API ব্যবহার করে আপনি দুই ধরনের অপারেশন পরিচালনা করতে পারবেন:
এটি বিশেষভাবে তখনই উপকারী যখন আপনি একাধিক টেবিলে বা আইটেমে একযোগে রিড এবং রাইট অপারেশন করতে চান এবং আপনি চান যে, সমস্ত অপারেশন একসাথে সম্পন্ন হবে অথবা কোন একটিও হবে না।
Transactional write অপারেশন ব্যবহার করে আপনি একাধিক আইটেম বা টেবিলের মধ্যে ডেটা লিখতে পারেন এবং একযোগে সকলটি সফল হলে কমিট হয়। যদি কোন সমস্যা হয়, তাহলে পুরো ট্রানজেকশন রোলব্যাক হবে।
উদাহরণ (Python - Boto3):
import boto3
from botocore.exceptions import ClientError
# DynamoDB client তৈরি
dynamodb = boto3.client('dynamodb')
# ট্রানজেকশনাল write operation
try:
response = dynamodb.transact_write_items(
TransactItems=[
{
'Put': {
'TableName': 'Table1',
'Item': {
'PartitionKey': {'S': 'value1'},
'SortKey': {'S': 'value2'},
'Attribute1': {'S': 'value3'}
}
}
},
{
'Put': {
'TableName': 'Table2',
'Item': {
'PartitionKey': {'S': 'value4'},
'SortKey': {'S': 'value5'},
'Attribute2': {'S': 'value6'}
}
}
}
]
)
print("Transaction Successful:", response)
except ClientError as e:
print("Transaction Failed:", e)
এই কোডে দুটি টেবিলে (Table1 এবং Table2) ডেটা একসাথে লেখা হচ্ছে। যদি একটি টেবিলের রাইট অপারেশন ব্যর্থ হয়, তাহলে আরেকটি টেবিলের রাইট অপারেশনও রোলব্যাক হয়ে যাবে।
Transactional read অপারেশন ব্যবহার করে আপনি একাধিক আইটেম একসাথে পড়তে পারেন এবং আপনি নিশ্চিত করতে পারবেন যে, সমস্ত আইটেমগুলি একই কনসিস্টেন্ট স্টেট থেকে আসবে। ট্রানজেকশনাল রিড অপারেশন শুধুমাত্র Read Consistent (যেমন টেবিলের লেটেস্ট ডেটা) রিটার্ন করে।
উদাহরণ (Python - Boto3):
import boto3
from botocore.exceptions import ClientError
# DynamoDB client তৈরি
dynamodb = boto3.client('dynamodb')
# ট্রানজেকশনাল read operation
try:
response = dynamodb.transact_get_items(
TransactItems=[
{
'Get': {
'TableName': 'Table1',
'Key': {
'PartitionKey': {'S': 'value1'},
'SortKey': {'S': 'value2'}
}
}
},
{
'Get': {
'TableName': 'Table2',
'Key': {
'PartitionKey': {'S': 'value4'},
'SortKey': {'S': 'value5'}
}
}
}
]
)
print("Transaction Successful:", response)
except ClientError as e:
print("Transaction Failed:", e)
এই কোডে দুটি টেবিল থেকে ডেটা পড়া হচ্ছে এবং ট্রানজেকশনাল ভাবে নিশ্চিত করা হচ্ছে যে, দুটি আইটেমই একসাথে একসাথে পাওয়া যাবে, এবং ডেটা কনসিস্টেন্ট থাকবে।
DynamoDB ট্রানজেকশনাল API ACID গুণাবলী বজায় রাখে:
DynamoDB এর Transactional API একটি শক্তিশালী টুল যা নিশ্চিত করে যে একাধিক রিড ও রাইট অপারেশনগুলো ACID গুণাবলী বজায় রেখে একসাথে সম্পাদিত হবে। এটি একাধিক টেবিল এবং আইটেমে ডেটা ম্যানিপুলেট করার জন্য অত্যন্ত উপকারী, বিশেষ করে যখন আপনাকে ডেটার কনসিস্টেন্সি এবং একটিভিটি নিশ্চিত করতে হয়।
common.read_more